GBase 8s ODBC Driver 概述
这些主题介绍 GBase 8s ODBC Driver,并描述它的优势和架构。这些主题还描述符合性、隔离和锁级别、库,以及环境变量。
什么是 GBase 8s ODBC Driver?
“开放数据库互连”(ODBC)是数据库应用程序编程接口(API)的一种规范。
Microsoft™ ODBC Version 3.0 基于 X/Open 和 International Standards Organization/International Electromechanical Commission(ISO/IEC)的 Call Level Interface 规范。ODBC 支持带有 C 函数库的 SQL 语句。应用系统调用这些函数来实现 ODBC 功能。
ODBC 应用程序使得您能够执行下列操作:
- 连接至数据源,或从数据源断开连接
- 检索关于数据源的信息
- 检索关于 GBase 8s ODBC Driver 的信息
- 设置和检索 GBase 8s ODBC Driver 选项
- 准备和发送 SQL 语句
- 检索 SQL 结果,并动态地处理结果
- 检索关于 SQL 结果的信息,并动态地处理该信息
在结果可用之前或之后,ODBC 都允许您为结果分配存储。此特性允许您确定结果和要采取的行动,而不受预定义的数据结构强加的限制。
ODBC 不需要预处理器来编译应用程序。
ODBC 支持“安全套接层”(SSL)。
GBase 8s ODBC Driver 特性
GBase 8s ODBC Driver 实现 Microsoft™“开放数据库互连”(ODBC)Version 3.0 标准。
GBase 8s ODBC Driver 产品还提供下列特性和功能:
- Data Source Name (DSN) 迁移
- Driver Manager Replacement Module,支持 ODBC 2.x 应用程序与 ODBC 驱动程序 Version 3.00 之间的兼容性。
- Microsoft Transaction Server (MTS),允许您开发、运行和管理可伸缩的、基于组件的 Internet 和 intranet 服务器应用程序的一种环境。MTS 执行下列任务:
- 管理系统资源,包括进程、线程和数据库连接,以便于应用程序可缩放满足许多并发用户
- 管理服务器组件创建、执行和删除
- 自动地开始和控制事务,实现应用程序的可靠性
- 实现安全性,以便于未获授权的用户不可访问应用程序
- 为配置、管理和部署提供工具
如果想要以 GBase 8s ODBC Driver 来使用由 MTS 管理的分布式事务,则必须启用连接池。
- 扩展的数据类型,包括 row 和 collection
- 长标识符
- 对书签的有限支持
- GLS 数据类型
- 广泛的错误检测
- Unicode 支持
- XA 支持
- 对互联网 128 位协议的 Internet Protocol Version 6 支持(要获取更多信息,请参阅《GBase 8s 管理员指南》。)
支持扩展的数据类型
GBase 8s ODBC Driver 支持扩展的数据类型。
GBase 8s ODBC Driver 支持下列扩展的数据类型:
- 集合(LIST、MULTISET、SET)
- DISTINCT
- OPAQUE(固定的、未命名的)
- row(命名的,未命名的)
- 智能大对象(BLOB、CLOB)
- 支持某些扩展的数据类型的客户机函数
支持 GLS 数据类型
GBase 8s ODBC Driver 支持 GLS 数据类型。
GBase 8s ODBC Driver 支持下列 GLS 数据类型:
- NCHAR
- NVARCHAR
扩展的错误检测
GBase 8s ODBC Driver 检测 XA 类型错误。
某些 ODBC 函数参数的附加的值
GBase 8s ODBC Driver 支持某些 ODBC 参数的附加的值。
某些 ODBC 函数参数的这些附加的值包括:
- SQLColAttributes 的 fDescType 值
- SQL_INFX_ATTR_FLAGS
- SQL_INFX_ATTR_EXTENDED_TYPE_ALIGNMENT
- SQL_INFX_ATTR_EXTENDED_TYPE_CODE
- SQL_INFX_ATTR_EXTENDED_TYPE_NAME
- SQL_INFX_ATTR_EXTENDED_TYPE_OWNER
- SQL_INFX_ATTR_SOURCE_TYPE_CODE
- SQLGetInfo 的 fInfoType 返回值
- SQL_INFX_LO_PTR_LENGTH
- SQL_INFX_LO_SPEC_LENGTH
- SQL_INFX_LO_STAT_LENGTH
- SQLGetConnectOption 和 SQLSetConnectOption 的 fOption 值:SQL_INFX_OPT_LONGID
- SQLGetConnectOption 和 SQLSetConnectOption 的 fOption 值:SQL_ATTR_ENLIST_IN_DTC
ODBC 组件概述
随同 GBase 8s ODBC Driver 的 ODBC 包括几个组件。
随同 GBase 8s ODBC Driver 的 ODBC 可包括下列组件:
-
Driver manager
可链接至驱动程序管理器的应用程序,其链接至数据源指定的驱动程序。驱动程序管理程序还检查参数和事务。在大多数 UNIX™ 平台上,都可从第三方供应商购买 ODBC Driver Manager。
在 Microsoft™ Windows™ 平台上,ODBC Driver Manager 是 OS 的一部分。
-
GBase 8s ODBC Driver
驱动程序提供至 GBase 8s 数据库服务器的接口。应用程序可在下列配置中使用驱动程序:
- 要链接至 ODBC 驱动程序管理器
- 要链接至 Driver Manager Replacement & 驱动程序
- 要直接链接至驱动程序
-
数据源
驱动程序提供至下列数据源的访问:
- 包括数据库服务器的数据库管理系统(DBMS)
- 数据库
- 访问数据库所需的操作系统和网络软件
带有驱动程序管理器的 GBase 8s ODBC Driver
当在系统中包括驱动程序管理器时,有一种软件体系结构。
当在系统中包括驱动程序管理器时,下图展示软件体系结构。在这样的系统中,驱动程序和驱动程序管理器就像处理函数调用的单个单元一样行动。
图: 带有驱动程序管理器的 GBase 8s ODBC Driver
不带有驱动程序管理器的 GBase 8s ODBC Driver(UNIX™)
当系统中不包括驱动程序管理器时,有一种软件体系结构。
下图展示使用不带有驱动程序管理器的 GBase 8s ODBC Driver 的应用程序。在此情况下,该应用程序必须链接至 GBase 8s ODBC Driver 库。
图: 不带有驱动程序管理器的 GBase 8s ODBC Driver
带有 DMR 的 GBase 8s ODBC Driver
GBase 8s ODBC Driver 包括一个“驱动程序管理器替代”(DMR)库。该 DMR 替代驱动程序管理器不可用的平台上的驱动程序管理器。
下图展示带有 DMR 的 ODBC 配置。
图: 驱动程序管理器替代模块的体系结构
直接链接至 ODBC Version 4.10 驱动程序和 DMR 的应用程序不需要 ODBC Driver Manager。
除了支持 ODBC Version 4.10 特性之外,DMR 还支持 ODBC 2.x 应用程序与 GBase 8s ODBC Driver Version 3.00 之间的兼容性。要与 ODBC 2.x 应用程序相兼容,应用程序必须通过 DMR 或通过 ODBC Version 4.10 驱动程序管理器,来连接至 GBase 8s ODBC Driver Version 3.00。
不可使用 GBase 8s DMR 来连接至非 GBase 8s 数据源。DMR 不支持连接池。DMR 不在 Unicode 与 ANSI API 之间映射。
GBase 8s ODBC Driver 组件
GBase 8s ODBC Driver 包括四个组件。
GBase 8s ODBC Driver 包括下列组件:
- 环境变量
- 标头文件
- 数据类型
- 库
环境变量
您必须为驱动程序设置的四个环境变量。
以下列表描述您必须为驱动程序设置的环境变量。要获取关于环境变量的更多信息,请参阅《GBase 8s SQL 指南:参考》。
GBS_HOME
安装 GBase 8s Client Software Development Kit 处的目录的完全路径。
在 Windows™ 平台上,GBS_HOME 是注册设置,而不是环境变量。在安装期间设置它。
PATH
搜索可执行程序的目录。PATH 的设置必须包括至 $GBS_HOME/bin目录的路径。
DBCENTURY(可选的)
控制年值的设置。当用户发出包含仅指定年份的最后两个数字的 date 或 datetime 字符串的语句时,DBCENTURY影响客户机程序。例如:
insert into datetable (datecol) values ("01/01/01");
数据库服务器将此语句中指定的日期存储为 01-01-1901 或 01-01-2001,这取决于客户机上的 DBCENTURY值。
GL_DATE(可选的)
GL_DATE 控制日期的解释。例如,您可指定日期格式为 mm-dd-yyyy 或 yyyy-mm-dd。
在 UNIX™ 上设置环境变量
如果您在命令行处设置环境变量,则每当登录至系统时,都必须重置它们。如果在文件中设置环境变量,则当登录到系统时,会自动设置它们。
GBase 8s ODBC Driver 在 $GBS_HOME/etc 中提供一个名为 setup.odbc 的样例设置文件。您可使用此文件,来为驱动程序设置环境变量。下面列表描述 setup.odbc 中的环境变量。
GBS_HOME
安装 GBase 8s Client Software Development Kit 处的目录的完全路径。
GBASEDBTSQLHOSTS
此值是可选的。它指定包含 sqlhosts 的目录。在缺省情况下,sqlhosts 在 $GBS_DATA/conf 中。
ODBCINI
此值是可选的。您可使用它来为 odbc.ini 文件指定替代的位置。缺省位置为您的 home 目录。
在 Windows 中设置环境变量
如果在命令行处设置环境变量,则必须在登录至 Windows™ 环境时重置它们。然而,如果在 Windows 注册表中设置它们,则在登录时会自动设置。
GBase 8s ODBC Driver 在 Windows 注册表中的下列位置中存储环境变量:
\HKEY_CURRENT_USERS\Software\Gbasedbt\Environment
在 Windows 环境中,您必须使用 setnet32.exe 或直接更新注册表的工具,来设置诸如 iclit09b.dll 这样的 GBase 8s动态链接库(DLL)使用的环境变量。Setnet 实用程序只能用于设置 GBase 8s 环境变量。
可根据开发环境的需要来使用环境变量。例如,编译器需要知道在哪里找到 include 文件。要指定 include 文件的位置,请设置环境变量 GBS_HOME(或某其他环境变量),然后将 include 路径设置为 GBS_HOME\incl\cli。
设置环境变量的选项有下列优先顺序:
- Setnet 实用程序
- 命令行
- Windows 注册表
标头文件
您可使用 sql.h 和 sqlext.h 标头文件,来运行 GBase 8s ODBC Driver,其为 Microsoft™ 编译器的一部分。
要运行 GBase 8s 扩展,请包括安装在 GBS_HOME/incl/cli 中的 infxcli.h 文件。此文件定义 GBase 8s ODBC Driver 常量和类型,并为 GBase 8s ODBC Driver 环境提供函数 prototype。如果包括 infxcli.h 文件,则它自动地包括 sql.h 和 sqlext.h 文件。
sql.h 和 sqlext.h 标头文件包含 C 数据类型的定义。
请在 XA ODBC 应用程序中包括 xa.h 标头文件。Windows™ 上的 ODBC 应用程序需要 GBase 8s Client Software Development Kit 来编译。在重新编译它们之前,ODBC 驱动程序的应用程序可能需要在 PATH 环境变量中包括 Client SDK 的位置。
数据类型
存储在数据源上的一列数据有一个 SQL 数据类型。
GBase 8s ODBC Driver 将特定于 GBase 8s 的 SQL 数据类型映射为以 ODBC SQL 语法定义的 ODBC SQL 数据类型。(驱动程序通过 SQLGetTypeInfo 返回这些映射。它还使用 ODBC SQL 数据类型来描述 SQLColAttributes 和 SQLDescribeCol 中的列和参数的数据类型)。
每一 SQL 数据类型对应于一个 ODBC C 数据类型。在缺省情况下,驱动程序假设存储位置的 C 数据类型对应于该位置绑定至其的列或参数的 SQL 数据类型。如果存储位置的 C 数据类型不是缺省的 C 数据类型,则应用程序可以使用 SQLBindCol 的 TargetType、SQLGetData 的 fCType 参数,以及 SQLBindParameter 中的 ValueType 参数来指定正确的 C 数据类型。在驱动程序从数据源返回数据之前,它将数据转换为指定的 C 数据类型。在驱动程序将数据发送至数据源之前,它将数据从指定的 C 数据类型转换为 SQL 数据类型。
GBase 8s 数据类型名称不同于 Microsoft™ ODBC 数据类型名称。要获取关于这些差异的信息,请参阅《GBase 8s ODBC Driver 程序员指南》。
库
对于 UNIX™ 和 Windows™,有一个安装库的安装过程。
UNIX
该安装过程将下列库安装至 GBS_HOME/lib/cli 内。在 odbc.ini 文件中的每一数据源规范部分中,将驱动程序值指定为下列库文件名称之一的完整路径。
libifcli.a 或 libcli.a
单个(非线程的)库的静态版本
libifcli.so 或 iclis09b.so
单个(非线程的)库的共享版本
libthcli.a
多线程库的静态版本
libthcli.so 或 iclit09b.so
多线程库的共享版本
libifdrm.so 或 idmrs09a.so
SMR(线程安全的)共享库
如果未使用驱动程序管理器,则应用程序需要连接至 GBase 8s ODBC Driver 库的静态或共享版本。
下列编译命令将应用程序链接至 GBase 8s ODBC Driver 库的线程安全版本:
cc ... -L$GBS_HOME/lib/cli -lifdmr - lthcli
Windows
安装过程将下列库安装至 GBS_HOME\lib 内。
iclit09b.lib
直接启用至驱动程序的链接,而不使用驱动程序管理器
iregt07b.lib
允许直接链接至 iregt07b.dll
下列编译命令将应用程序链接至 GBase 8s ODBC Driver 库的线程安全版本:
cl ... -L$GBS_HOME/lib/cli iclit09b.lib
如果使用驱动程序管理器,则必须将应用程序仅链接至驱动程序管理器库,如下例所示:
cl odbc32.lib
GBase 8s ODBC Driver 需要 Version 3.0 驱动程序管理器。
GBase 8s ODBC Driver API
应用程序使用 GBase 8s ODBC Driver API 建立与数据源的连接,将 SQL 语句发送至数据源,动态地处理结果数据,并终止连接。
驱动程序允许应用程序执行下列步骤:
-
连接至数据源。
可以通过 DSN 连接来连接数据源,也可以使用 DSN-less 连接字符串。指定数据源的名称和完成连接所需的任何附加信息。
-
处理一个或多个 SQL 语句:
- 将 SQL 文本字符串置于缓冲区中。如果该语句包括参数标记,则设置参数值。
- 如果该语句返回结果集,则为该语句分配一个游标名称,或让驱动程序分配一个。
- 准备该语句,或者提交立即执行。
- 如果该语句创建结果集,则可查询结果集的属性,诸如列数,以及特定列的名称和类型。对于结果集中每一列,请指定存储和访存结果。
- 如果该语句导致错误,则从驱动程序检索错误信息,并采取恰当的措施。
-
通过提交或回滚来结束任何事务。
-
当应用程序结束与数据源的交互时,终止连接。
每个 GBase 8s ODBC Driver 函数名称都以前缀 SQL 开始。每一函数接受一个或多个参数。定义参数作为(至驱动程序的)输入或(来自驱动程序的)输出。
下图展示了应用程序进行的基本函数调用,即使应用程序通常也调用其他函数。
图: GBase 8s ODBC Driver应用程序进行的函数调用的示例列表
环境、连接和语句句柄
当应用程序请求它时,驱动程序和驱动程序管理器为关于环境、每一连接和每一 SQL 语句的信息分配存储。
对于这些分配,驱动程序为每一应用程序返回一个句柄,在每一函数调用中,其使用一个或多个句柄。
GBase 8s ODBC Driver API 使用下列句柄类型:
环境句柄
环境句柄为全局信息标识内存存储,包括有效的连接句柄和当前活动的连接句柄。环境句柄为 henv 变量类型。一个应用程序使用一个环境句柄。在它连接至数据源之前,它必须请求此句柄。
连接句柄
连接句柄为关于特殊连接的信息标识内存存储。连接句柄为 hdbc变量类型。应用程序必须在连接至数据源之前,必须请求连接句柄。每个连接句柄都与环境句柄相关联。但是,环境句柄可以与多个连接句柄相关联。
语句句柄
语句句柄为关于 SQL 语句的信息标识内存存储。语句句柄为 hstmt 变量类型。在应用程序提交 SQL 请求之前,它必须请求一语句句柄。每一语句句柄仅与一个连接句柄相关联。但是,每一连接句柄可与多个语句句柄相关联。
缓冲区
应用程序在输入缓冲区中将数据传给驱动程序。驱动程序在输出缓冲区中将数据返回给应用程序。
应用程序必须同时为输入和输出缓冲区分配内存。如果应用程序使用缓冲区来检索字符串数据,则该缓冲区必须包含空终止字节的空间。
有些函数接受指向缓冲区的指针,稍后由其他函数来使用。应用程序必须确保这些指针保持有效,直到所有适用的函数都已使用了它们。例如,SQLBindCol中的参数 rgbValue 指向 SQLFetch 返回列的数据的输出缓冲区。
输入缓冲区
应用程序将输入缓冲区的地址和长度传给驱动程序。
缓冲区的长度必须为下列值之一:
-
大于或等于零的长度
此值为输入缓冲区中数据的实际长度。对于字符数据,长度零指示该数据为空字符串(零长度)。零长度不同于空指针。如果应用程序指定字符数据的长度,则字符数据不需要以空字符结尾。
-
SQL_NTS
此值指定字符串数据值为空终止的。
-
SQL_NULL_DATA
此值告诉驱动程序忽略输入缓冲区中的值,并替代使用 NULL 数据值。仅当输入缓冲区提供 SQL 语句中参数的值时,它才是有效的。
对于包含嵌入的空字符的字符数据,GBase 8s ODBC Driver函数的操作是未定义的;出于最大可操作性的考虑,最好不要使用它们。GBase 8s 数据库服务器将空字符处理为字符串结束标志,或作为不再存在数据的指示符。
除非在函数描述中禁止它,否则,输入缓冲区的地址可为空指针。在此情况下,对应的缓冲区长度参数的值将被忽略。
输出缓冲区
应用程序将参数传给驱动程序,以便于驱动程序可在输出缓冲区中返回数据。
这些参数为:
-
输出缓冲区的地址,驱动程序将数据返回这里
除非在函数描述中禁止它,否则,输出缓冲区的地址可为空指针。在此情况下,驱动程序不在缓冲区中返回任何内容,在没有错误时,返回 SQL_SUCCESS。
如有必要,在返回它之前,驱动程序转换数据。在返回它之前,驱动程序始终空终止字符数据。
-
缓冲区的长度
如果返回的数据有固定的 C 长度,比如整数、实数或日期结构,则驱动程序忽略此值。
-
驱动程序返回数据长度的变量地址(长度缓冲区)
如果在结果集中数据为空值,则返回的数据长度为 SQL_NULL_DATA。否则,返回的数据长度为可用于返回的数据的字节数。如果驱动程序转换该数据,则返回的数据长度为转换之后保留的字节数;对于字符数据,它不包括驱动程序添加的空终止字节。
如果输出缓冲区太小,则驱动程序尝试截断数据。如果截断未导致有效数据的丢失,则驱动程序在输出缓冲区中返回截断的数据,在长度缓冲区中返回可用数据的长度(与截断的数据的长度相反),并返回 SQL_SUCCESS_WITH_INFO。如果截断导致有效数据的丢失,则驱动程序保持输出和长度缓冲区不变,并返回 SQL_ERROR。应用程序调用 SQLGetDiagRec 来检索关于截断或错误的信息。
SQLGetInfo 尝试实现
GBase 8s 实现 GBase 8s ODBC Driver 的 SQLGetInfo 参数。
下表描述 GBase 8s ODBC Driver 的 SQLGetInfo 参数的 GBase 8s 实现。
参数名称 | GBase 8s 实现 |
---|---|
SQL_ACTIVE_ENVIRONMENTS | GBase 8s 驱动程序没有对活动环境数的限制。始终返回零。 |
SQL_AGGREGATE_FUNCTIONS | GBase 8s 驱动程序返回数据库服务器支持的所有聚集函数。 |
SQL_ASYNC_MODE | GBase 8s 驱动程序返回 SQL_AM_NONE。 |
SQL_ATTR_METADATA_ID | GetInfo 和 PutInfo 支持 |
SQL_BATCH_ROW_COUNT | GBase 8s 驱动程序返回位掩码零。 |
SQL_BATCH_SUPPORT | GBase 8s 驱动程序返回位掩码零。 |
SQL_CA1_POS_DELETE | 支持对 SQLSetPos 调用中的操作参数 |
SQL_CA1_POS_POSITION | 支持对 SQLSetPos 调用中的操作参数 |
SQL_CA1_POS_REFRESH | 支持对 SQLSetPos 调用中的操作参数 |
SQL_CA1_POS_UPDATE | 支持对 SQLSetPos 调用中的操作参数 |
SQL_CA1_POSITIONED_DELETE | 当游标为 forward-only 游标时,支持 DELETE WHERE CURRENT OF SQL 语句。 |
SQL_CA1_POSITIONED_UPDATE | 当游标为 static-only 游标时,支持 UPDATE WHERE CURRENT OF SQL 语句。(符合 SQL-92 入门级的驱动程序始终急哦根据支持返回此选项。) |
SQL_CA1_LOCK_NO_CHANGE | 当游标为 static-only 游标时,在对 SQLSetPos 的调用中支持 SQL_LOCK_NO_CHANGE 的 LockType 参数。 |
SQL_CA1_SELECT_FOR_UPDATE | 当游标为 forward-only 游标时,支持 SELECT FOR UPDATE SQL 语句。(符合 SQL-92 入门级的驱动程序始终急哦根据支持返回此选项。) |
SQL_CATALOG_NAME | GBase 8s 驱动程序返回 'Y' |
SQL_COLLATION_SEQ | INTERSOLV DataDirect ODBC Driver返回 InfoValuePtr (未更改的) |
SQL_DDL_INDEX | 返回位掩码 SQL_DL_CREATE_INDEX | SQL_DL_DROP_INDEX |
SQL_DESCRIBE_PARAMETER | 返回 'N';不可描述参数。(这是因为最新的 GBase 8s 数据库服务器支持函数重载,以便于带有相同该名称的多个函数可接受不同的参数类型。) |
SQL_DIAG_DYNAMIC_FUNCTION | 返回空字符串 |
SQL_DROP_TABLE | 返回位掩码 SQL_DT_DROP_TABLE | SQL_DT_CASCADE | SQL_DT_RESTRICT |
SQL_DROP_VIEW | 返回位掩码 SQL_DV_DROP_TABLE | SQL_DV_CASCADE | SQL_DV_RESTRICT |
SQL_INDEX_KEYWORDS_ | SQL_LLK_ASC | SQL_LK_DESC |
SQL_INSERT_STATEMENT | 返回位掩码 SQL_IS_INSERT_LITERALS | SQL_ INSERT_SEARCHED | SQL_IS_SELECT_INTO |
SQL_MAX_DRIVER_CONNECTIONS | 返回零 |
SQL_MAX_IDENTIFIER_LEN | 返回不同的值,这依赖于数据库服务器容量 |
SQL_ODBC_INTERFACE_CONFORMANCE | 返回 SQL_OIC_CORE |
SQL_PARAM_ARRAY_ROW_COUNTS | 返回 SQL_PARC_NO_BATCH |
SQL_PARAM_ARRAY_SELECTS | 返回 SQL_PAS_NO_SELECT |
SQL_SQL_CONFORMANCE | 返回 SQL_OSC_CORE |
SQL_SQL92_FOREIGN_KEY_DELETE_RULE | 返回位掩码零 |
SQL_SQL92_FOREIGN_KEY_UPDATE_RULE | 返回位掩码零 |
SQL_SQL92_GRANT | 返回位掩码零 |
SQL_SQL92_NUMERIC_VALUE_FUNCTIONS | 返回位掩码零 |
SQL_SQL92_PREDICATES | 返回位掩码零 |
SQL_SQL92_RELATIONAL_JOIN_OPERATORS | 返回位掩码零 |
SQL_SQL92_REVOKE | SQL_SR_CASCADE | SQL_SR_RESTRICT |
SQL_SQL92_ROW_VALUE_CONSTRUCTOR | 返回位掩码零 |
SQL_SQL92_STRING_FUNCTIONS | 返回位掩码零 |
SQL_SQL92_VALUE_EXPRESSIONS | 返回位掩码零 |
SQL_STANDARD_CLI_CONFORMANCE | 返回位掩码 SQL_SCC_XOPEN_CLI_VERSION1 | SQL_SCC_ISO92_CLI |
SQL_STATIC_CURSOR_ATTRIBUTES1 | 仅可滚动的 |
SQL_STATIC_CURSOR_ATTRIBUTES2 | 仅可滚动的 |
SQL_XOPEN_CLI_YEAR | 返回字符串 "1995" |
全球语言支持
GBase 8s 产品可支持多种语言、文化的代码集。“全球语言支持”(GLS)提供对所有特定于语言和特定于文化的信息的支持。
下表描述如何根据您的平台来设置 GLS 选项。
平台 | 如何设置 GLS 选项 |
---|---|
UNIX™ | 在 odbc.ini 文件中指定 GLS 选项。 |
Windows™ | 在 GBase 8s ODBC Driver DSN Setup 对话框中指定 GLS 选项。 |
下表描述 GBase 8s ODBC Driver 的 GLS 选项。
GLS 选项 | 描述 |
---|---|
客户机语言环境 | 描述: 应用程序在其中运行的语言环境和代码集 格式: locale.codeset@modifier UNIX 的 odbc.ini 字段: CLIENT_LOCALE UNIX 的缺省值: en_us.8859-1 Windows 的缺省值: en_us.1252 重要: GBase 8s ODBC Driver 忽略在操作系统环境中和在 Setnet32 中的 CLIENT_LOCALE 环境变量的设置。要更改客户机语言环境,必须使用此 GLS 选项。 |
数据库语言环境 | 描述: 在其中创建了数据库的语言环境和代码集 格式: locale.codeset@modifier UNIX 的 odbc.ini 字段: DB_LOCALE UNIX 的缺省值: en_us.8859-1 Windows 的缺省值: en_us.1252 重要: GBase 8s ODBC Driver 忽略操作系统环境中和 Setnet32 中的 DB_LOCALE 环境变量的设置。要更改数据库环境变量,则必须使用此 GLS 选项。 |
事务库 | 描述: 指定代码集转换 格式: 至库文件的路径。事务 DLL 必须遵循事务库的 ODBC 标准。要获取更多信息,请参阅 GBase 8s ODBC Driver 程序员指南。 UNIX 的 odbc.ini 字段: TRANSLATIONDLL UNIX 的缺省值: $GBS_HOME/lib/esql/igo4a304.xx 在此,xx 是共享库的特定于平台的扩展 Windows 的缺省值: igo4n304.dll |
事务选项 | 描述: 非 GBase 8s 事务库的选项 格式: 由供应商确定 UNIX 的 odbc.ini 字段 TRANSLATION_OPTION Windows 的缺省值: 由供应商确定 限制: 请不要为 GBase 8s 事务库设置此值。GBase 8s 事务库基于客户机语言环境和数据库语言环境值来确定事务选项。 |
VMB 字符 | 描述: 对于代码集转换的数据,当 rgbValue(输出区)不够大时,改变指定如何设置 pcbValue 的多字节字符长度报告选项。可能的值为: Estimate GBase 8s ODBC Driver 对返回数据所需的存储空间做最坏估算。 Exact GBase 8s ODBC Driver将代码集转换的数据写至磁盘,直到转换所有数据为止。由于此选项可能降低性能,因此建议您不要使用此选项,除非应用程序不适用于 Estimate。 对于数据库或客户机语言环境,当您使用多字节代码集(其中的字符从 1 至 4 字节长度不等)时,数据库语言环境中的字符串或简单大对象(TEXT)的长度不指示将它转换为客户机语言环境之后的字符串长度。 UNIX 的可能值: 0 = Estimate 1 = Exact Windows 的可能值: Estimate Exact UNIX 的 odbc.ini 字段: VMBCHARLENEXACT UNIX 的缺省值: Estimate Windows 的缺省值: Estimate |
要获取关于 GLS 和语言环境的更多信息,请参阅《GBase 8s GLS 用户指南》。
X/Open 标准接口
除了标准 ODBC 函数之外,GBase 8s ODBC Driver 还支持附加的函数。
GBase 8s ODBC Driver 支持下列函数
_fninfx_xa_switch
获得 GBase Enterprise Records 定义的 xa_switch 结构的函数
IFMX_SQLGetXaHenv
取得与 XA Connection 相关联的环境句柄的函数
IFMX_SQLGetXaHdbc
取得与 XA Connection 相关联的数据库句柄的函数
xa_open
采用 xa_info 参数的函数。GBase 8s ODBC Driver 使用此 xa_info 来建立 XA connection
xa_info 的格式如下:
<appilcationtoken>|<DSN name>
应用程序令牌是应用程序为每一 xa_open 请求生成的唯一编号。它必须使用同一应用程序令牌作为 IFMX_SQLGetXaHenv 和 IFMX_SQLGetXaHdbc 的参数,来获得相关联的环境句柄和数据库句柄。
外部认证
对于 GBase 8s,您可通过 GBase 8s ODBC Driver 来实现外部认证。
有两个外部认证模块可用于 GBase 8s ODBC Driver,Pluggable Authentication Module(PAM)适用于 UNIX™ 和 Linux™ 服务器。在 Microsoft™ Windows™ 操作系统上支持 LDAP Authentication。
UNIX 和 Linux 上的 Pluggable Authentication Module(PAM)
在支持 PAM 的 UNIX™ 和 Linux™ 操作系统上,可随同 GBase 8s ODBC Driver 使用 Pluggable Authentication Module(PAM)。
PAM 使得系统管理员能够为不同的应用程序实现不同的认证机制。例如,像 UNIX 登录程序这样的系统的需求,可能与访问数据库敏感信息的应用程序不同。PAM 允许在单个机器中有多个这样的场景,因为认证服务是附加在应用程序级的。
Windows 上的 LDAP Authentication
在 Windows™ 操作系统上,可随同 GBase 8s ODBC Driver 使用 LDAP Authentication。LDAP Authentication 类似于 Pluggable Authentication Module。
当您想要使用 LDAP 服务器来认证系统用户时,请使用 LDAP Authentication 支持模块。该模块包含您可为特定的 LDAP Authentication 支持模块修改的源代码。要获取关于安装和定制 LDAP Authentication 支持模块的信息,请参阅《GBase 8s 安全指南》。
带有认证的 SQLSetConnectAttr() 函数
使用 SQLSetConnectAttr() 函数来指定服务器使用的回调函数。
SQLSetConnectAttr() 也用于指定回调函数使用的参数。参数属性按照为驱动程序指定的方式传回回调函数。
下列属性是特定于 GBase 8s 的对 ODBC 标准的扩展:
参数 | 类型 | 描述 |
---|---|---|
SQL_INFX_ATTR_PAM_FUNCTION | void * | 指向回调函数的指针。 |
SQL_INFX_ATTR_PAM_RESPONSE_BUF | void * | 指向包含对认证质询的响应的缓冲区的通用指针。 |
SQL_INFX_ATTR_PAM_RESPONSE_LEN | int | 响应缓冲区的长度,以字节计。 |
SQL_INFX_ATTR_PAM_RESPONSE_LEN_PTR | int * | 存储响应中的字节数的地址。 |
SQL_INFX_ATTR_PAM_CHALLENGE_BUF | void * | 指向包含认证质询的缓冲区的通用指针。驱动程序将从服务器收到的任何质询都存储在此缓冲区内。如果该缓冲区未大到足以包含该质询,则截断质询。通过将缓冲区长度与质询中的字节数相对比,回调函数可检测到此质询。由应用程序开发人员负责检测此情况,并正确地处理它。 |
SQL_INFX_ATTR_PAM_CHALLENGE_BUF_LEN | int | 质询缓冲区的长度,以字节计。 |
SQL_INFX_ATTR_PAM_CHALLENGE_LEN_PTR | int * | 存储质询中字节数的地址。 |
质询和响应缓冲区指针可为空。如果认证服务器要求存储缓冲区中的信息,则由于认证失败导致连接失败。无论连接是否成功,都会返回质询长度信息。如果消息类型不需要响应,则响应缓冲区可能为空(缺省的),或它可能包含空字符串。
可在任何时刻,以任何顺序来设置前面表中的属性。然而,它们仅对以驱动程序的连接函数之一的后续调用建立的连接有效。
通过使用下列连接属性之一,使用 SQLSetConnectAttr() API 设置隔离级别:
- SQL_TXN_READ_UNCOMMITTED = Read Uncommitted
- SQL_TXN_READ_COMMITTED = Read Committed
- SQL_TXN_SERIALIZABLE = Serializable
- SQL_TXN_REPEATABLE_READ = Repeatable Read
- SQL_TXN_LAST_COMMITTED = Last Committed
- SQL_TXN_TRANSACTION = Transaction
如果随同 SQLSetConnectAttr() API 使用 SQL_TXN_LAST_COMMITTED 或 SQL_TXN_TRANSACTION 属性,则您的应用程序必须直接链接至 GBase 8s ODBC Driver,而不连接至 ODBC Driver Manager。然而,如果在 odbc.ini 文件或 Data Source Administrator 中指定该属性,则应用程序可以使用 ODBC Driver Manager 连接。
如果使用 SQL_TXN_TRANSACTION 属性,则将在 DTC 应用程序中设置的隔离级别传播至服务器。仅应在 Windows™ DTC 应用程序中使用此选项。
ODBC 驱动程序的默认行为是从 VARCHAR 列结果的结尾除去空字符。要保留结尾的空白,请设置 SQL_INFX_ATTR_LEAVE_TRAILING_SPACES 属性:
SQLSetConnectAttr( hdbc, SQL_INFX_ATTR_LEAVE_TRAILING_SPACES, (SQLPOINTER)SQL_TRUE, SQL_IS_INTEGER );
要除去结尾的空白,请将 SQL_TRUE 更改为 SQL_FALSE。
将该行为限定至连接。
连接池和认证
在 ODBC 中,驱动程序管理器控制连接池。
当使用认证时,应用程序编程人员必须意识到连接池的影响。驱动程序管理器不控制其连接何时置于池中,或者何时从池中拉出。如果应用程序不了解用户就连接或断开连接,则连接池的性能优势得以保持,用户不会收到任何意外的认证质询。如果应用程序未使用户意识到他们正在重建连接,则仍没有认证问题,因为驱动程序管理器与服务器之间的连接从未关闭。
连接函数
可随同认证模块使用任何建立连接的 ODBC 函数,SQLConnect()、SQLDriverConnect() 或 SQLBrowseConnect()。
当使用这些函数时,请考虑下列事项:
SQLConnect() 函数
SQLConnect() 函数的 DriverCompletion 参数可采用下列值
- SQL_DRIVER_PROMPT
- SQL_DRIVER_COMPLETE
- SQL_DRIVER_COMPLETE_REQUIRED
- SQL_DRIVER_NOPROMPT
如果预料到有认证挑战,则推荐您使用 SQL_DRIVER_NOPROMPT。使用其他值可能导致用户面对认证信息的多个请求。
SQLBrowseConnect() 函数
设计 SQLBrowseConnect() 函数旨在反复使用,驱动程序为应用程序提供关于如何完成连接字符串的指导,且应用程序提示用户所需的值。这可导致用户在连接字符串完成与认证之间面对多个提示。
此外,作为连接字符串完成进程的一部分,驱动程序通常向应用程序提供数据库的选择。然而,在用户通过身份验证之后,驱动程序才能为数据库的列表查询服务器。根据应用程序逻辑,它是在原始的连接字符串中提供数据库名称,还是打算从认证服务器接受质询,当服务器使用认证时,可能无法使用 SQLBrowseConnect()。
第三方应用程序或中间代码
当使用认证时,应由应用程序处理来自认证服务器的任何质询。
要处理质询,应用程序编程人员必须能够向驱动程序注册回调函数。由于在 ODBC 标准中未定义用来完成此任务的属性,因此,使用的属性为 GBase 8s 扩展。
以 Microsoft™ 的 ADO 层编写的许多应用程序从开发人员抽取 ODBC 调用。大多数 Visual Basic 应用程序都用 ADO 层编写。这些应用程序和第三方应用程序通常不知道 GBase 8s 扩展,且不能处理身份验证质询。
Windows™ 上的 ODBC Data Source Administrator 也属于第三方应用程序这一类。当配置 UNIX™ 数据源时,不是所有特性都可用。例如,如果收到质询,则 Apply and Test Connection 按钮和 User Server Database Locale 切换不起作用,因为那些特性需要连接到服务器的能力。
绕过 ODBC 解析
通过使用几个选项,可绕过 ODBC 解析。
有时,您可能想要通过绕过 ODBC 解析来提升性能。如果存在下列情况,请不要绕过 ODBC 解析:
- 打算在查询中使用 ODBC 转义序列。
- 在运行 SQL 查询之后,打算调用任何目录函数(例如,SQLColumns、SQLProcedureColumns 或 SQLTables)
可以使用下列方式来绕过 ODBC 解析:
-
在连接字符串中将 SKIPPARSING 设置为 1。在 SQLDriverConnect 调用中使用该连接字符串。例如:
connString="DB=_xxx_;UID=_xxx_;....;SKIPPARSING=1;"
-
在 SQLSetConnectAttr 调用中包括 SQL_INFX_ATTR_SKIP_PARSING,例如:
SQLSetConnectAttr (hdbc, SQL_INFX_ATTR_SKIP_PARSING, (SQLPOINTER)SQL_TRUE, SQL_IS_USMALLINT);
请在连接完成之后使用此调用。要恢复 ODBC 解析,请将 SQL_TRUE 更改为 SQL_FALSE。在连接级启用此值之后,以该连接分配的所有语句句柄都继承此属性。
-
在 SQLSetStmtAttr 调用中,包括 SQL_TRUE。要恢复 ODBC 解析,请将 SQL_TRUE 更改为 SQL_FALSE。
SQLSetStmtAttr (hstmt, SQL_INFX_ATTR_SKIP_PARSING, (SQLPOINTER)SQL_TRUE, SQL_IS_USMALLINT);
-
在 UNIX™ 系统上,在 odbc.ini 中设置 SKIPPARSING=1。要恢复 ODBC 解析,请将该值重置为 SKIPPARSING=0。
绕过 ODBC 解析的优先顺序如下:
- 如果在 odbc.ini 文件(在 UNIX 系统上)以及具有 SQLDriverConnect、SQLSetConnectAttr 或 SQLSetStmtAttr API 的应用程序中绕过或重置 ODBC 解析,而且也在带中,则 API 设置优先。
- 如果使用 SQLDriverConnect API 以及 SQLSetConnectAttr 或 SQLSetStmtAttr API 在应用程序中绕过或重置 ODBC 解析,则后者优先。
SQLGetDiagRecW 的字符中的 BufferLength
SQLGetDiagRecW API 在输出缓冲区中返回诊断信息,在此,BufferLength 参数是分配的缓冲区的长度。
BufferLength 的缺省值是分配的字节数。将 SQL_INFX_ATTR_LENGTHINCHARFORDIAGRECW 属性设置为 TRUE 之后,处理 BufferLength 为特定的字符数。作为 Widechar API,一个字符 = sizeof(SQLWCHAR) 字节。
以下列方式设置该属性:
- SQLSetEnvAttr (henv, SQL_INFX_ATTR_LENGTHINCHARFORDIAGRECW, (SQLPOINTER)SQL_TRUE, SQL_IS_UINTEGER);
- SQLSetConnectAttr (hdbc, SQL_INFX_ATTR_LENGTHINCHARFORDIAGRECW, (SQLPOINTER)SQL_TRUE, SQL_IS_UINTEGER);
- SQLSetStmtAttr (hstmt, SQL_INFX_ATTR_LENGTHINCHARFORDIAGRECW, (SQLPOINTER)SQL_TRUE, SQL_IS_UINTEGER);
- 在连接字符串中设置 LENGTHINCHARFORDIAGRECW=1。
- 在 UNIX™ 系统上,在 odbc.ini 中设置 LENGTHINCHARFORDIAGRECW=1
设置 SQL_INFX_ATTR_LENGTHINCHARFORDIAGRECW 的优先顺序为:
- SQLSetEnvAttr 属性的设置反映 henv、hdbc 和 hstmt 句柄。
- 重置 hdbc 和 hstmt 句柄,通过
- 设置 SQLSetConnectAttr
- 在连接字符串中传递属性
- 在 DSN 中启用 Length in Chars for SQLGetDiagRecW 选项
- 如果以前面提及的方法设置或未设置 hstmt 句柄,则设置 SQLSetStmtAttr 会重置它。
SQLGetDiagRec 中的 GBase 8s 和 ISAM 错误描述
SQLGetDiagRec API 在输出缓冲区中返回诊断信息,在此,错误描述特定于 GBase 8s 错误消息的。
当 GBase 8s 服务器遇到错误时,它返回 GBase 8s 错误代码以及相关联的错误描述。有一个附加的错误代码,ISAM 错误代码,其提供理解导致该 GBase 8s 错误代码的环境的必要信息。
如果未为 SQLSetConnectAttr API 设置属性,则 SQLGetDiagRec API 返回 GBase 8s 错误消息。
如果为 SQLGetDiagField API 设置了 SQL_DIAG_ISAM_ERROR 属性,则 SQLGetDiagField API 返回 ISAM 错误代码。
如果为 SQLSetConnectAttr API 设置了 SQL_INFX_ATTR_IDSISAMERRMSG 属性,则 SQLGetDiagRec API 同时返回 GBase 8s 错误消息和 ISAM 错误消息。
以下列方式设置 SQL_INFX_ATTR_IDSISAMERRMSG 属性:
SQLSetConnectAttr (hdbc, SQL_INFX_ATTR_IDSISAMERRMSG, (SQLPOINTER)SQL_TRUE, SQL_IS_UINTEGER);
提高单线程应用程序的性能
可以通过使用 SINGLETHREADED 连接参数,提升单线程应用程序的性能。缺省情况下,该值为 off。
请不要在 XA/MSDTC 环境中使用此参数。可在连接字符串中设置 SINGLETHREADED 连接参数,如下列示例所示:
DSN=xxx;Uid=xxx;Pwd=xxx;SINGLETHREADED=1;"
部分支持的和不支持的 ODBC 特性
GBase 8s ODBC Driver 支持几个 ODBC 特性的部分实现。
这些 ODBC 特性为
- 事务处理
- ODBC 游标
- ODBC 书签
- SQLBulkOperations
事务处理
事务隔离级别和事务模式的 GBase 8s ODBC Driver 实现与这些特性的 Microsoft™ ODBC 实现略有不同。
下列主题描述 GBase 8s ODBC Driver 中事务隔离级别和事务模式的实现。
事务隔离级别
GBase 8s ODBC Driver 支持 GBase 8s 数据库服务器的三个事务隔离级别。
对于 GBase 8s 数据库服务器,下表罗列 GBase 8s ODBC Driver 支持的事务隔离级别。
数据库服务器 | 事务隔离级别 |
---|---|
GBase 8s | ● SQL_TXN_READ_COMMITTED ● SQL_TXN_READ_UNCOMMITTED ● SQL_TXN_SERIALIZABLE |
缺省的事务隔离级别为 SQL_TXN_READ_COMMITTED。要更改事务隔离级别,请以 SQL_TXN_ISOLATION 的 fOption 值来调用 SQLSetConnectOption()。
要获取关于事务隔离级别的更多信息,请参阅《GBase 8s ODBC Driver 程序员指南》中的 SQL_DEFAULT_TXN_ISOLATION 和 SQL_TXN_ISOLATION_OPTION 描述。
更改事务模式
您可将事务模式从它缺省的 auto-commit 更改为 manual commit。
要将事务模式更改为 manual commit,请:
-
为数据库服务器启用事务日志记录。
要获取关于事务日志记录的信息,请参阅 GBase 8s 管理员指南。
-
调用 SQLSetConnectOption(),将 SQL_AUTOCOMMIT 设置为 SQL_AUTOCOMMIT_OFF。
ODBC 游标
GBase 8s ODBC Driver 支持 static 和 forward 游标,但不支持 dynamic 和 keyset-driven 游标。
ODBC 书签
书签是标识一行数据的值。
GBase 8s ODBC Driver 以 SQLFetchScroll 和 SQLExtendedFetch 支持书签,不以 SQLBulkOperations 支持它们。GBase 8s ODBC Driver 支持书签到下列程度:
- 仅使用变长书签。
- 为书签列将 SQL_DESC_OCTET_LENGTH 设置为 4。
- 书签是行集内包含行编号的一个整数,从 1 开始。
- 只有游标保持打开,书签才能保持。
- 完全支持 SQLFetchScroll,使用 SQL_FETCH_BOOKMARK 来访存 orientation 参数。
- SQLBulkOperations 不更新 SQL_ADD 的书签列。
SQLBulkOperations
GBase 8s ODBC Driver 仅支持 SQLBulkOperations 的 SQL_ADD 参数。
SQLDescribeParam
SQLDescribeParam 是一个 ODBC API,它返回查询参数的元数据。
在较早版本的 GBase 8s ODBC Driver 中,如果调用 API 来取得关于嵌入在另一例程内的表达式值或参数的信息,SQLDescribeParam API 返回 SQL_UNKNOWN。对于 BOOLEAN、LVARCHAR,或由其他 UDR 中下列表达式返回的内置的非 opaque GBase 8s 数据类型,此限制不再适用:
- 二进制算术表达式
- 加(+)
- 减(-)
- 乘(*)
- 除(/)
- 关系运算符表达式
- 小于(<)
- 小于或等于(<=)
- 等于(=、==)
- 大于或等于(>=)
- 大于(>)
- 不等于(<>、!=)
- 下列字符串运算
- 串联(||)
- MATCHES
- LIKE
- BETWEEN ... AND 条件表达式
例如,如果列 tab1.c1 是 INT 数据类型,则 SQLDescribeParam() 为下列查询的输入主变量返回类型 int:
select c1, c2 from tab1 where ABS(c1) > ?;
来自表达式另一侧的 UDR 可以是列表达式或内置的例程,但它不可以是用户定义的例程。在较早的版本中,在下列情况下,SQLDescribeParam API 为嵌入在另一过程中的表达式值和参数返回 SQL_UNKNOWN:
- 表达式的另一侧的值为用户定义的例程。
- 同一表达式的另一运算对象是用户定义的例程。
- 表达式的任何运算对象的数据类型不是 BOOLEAN、LVARCHAR 或内置的非 opaque 数据类型。
不支持的 Microsoft ODBC 驱动程序特性
GBase 8s ODBC Driver 不支持某些 Microsoft™ ODBC 驱动程序特性的实现。
不支持的 Microsoft ODBC 驱动程序特性是:
- 异步通讯模式
- 并发检查
- SQL_CA2_OPT_ROWVER_CONCURRENCY
- SQL_CA2_OPT_VALUES_CONCURRENCY
- CONVERT 标量函数
- 游标模拟特性:
- SQL_CA2_CRC_APPROXIMATE
- SQL_CA2_CRC_EXACT
- SQL_CA2_SIMULATE_NON_UNIQUE
- SQL_CA2_SIMULATE_TRY_UNIQUE
- SQL_CA2_SIMULATES_UNIQUE
- 动态游标属性
- Installer DLL